home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Monster Media 1996 #15
/
Monster Media Number 15 (Monster Media)(July 1996).ISO
/
prog_c
/
kbstf10.zip
/
SEEKBBUF.C
< prev
next >
Wrap
Text File
|
1996-01-31
|
3KB
|
100 lines
#define NULL 0
#if __STDC__
#define _Cdecl
#else
#define _Cdecl cdecl
#endif
void _Cdecl __int__(int interruptnum);
/* extern unsigned _Cdecl _psp; */
/* #include <stdlib.h> */
#define putchar(c) (_DL=c,_AH=02,__int__(0x21))
#define putbackslash() (_DL='\\',_AH=02,__int__(0x21))
char *HexDig="0123456789ABCDEF";
void puthexbyte(unsigned char ch)
{
putchar(HexDig[ch>>4]);
putchar(HexDig[ch&0xF]);
}
void puthexword(unsigned int w)
{
puthexbyte( ((unsigned char *) &w)[1] );
puthexbyte( *((unsigned char *) &w) );
}
void newline(void)
{ putchar('\r'); putchar('\n'); }
#define MK_FP(seg,ofs) ((void far *) \
(((unsigned long)(seg) << 16) | (unsigned)(ofs)))
#define SET_FP_OFF(fp,ofs) ((void far *) \
((((unsigned long)(fp))&0xFFFF0000)|(unsigned)(ofs)))
#define FAR_BYTE(fp) (*((unsigned char far *) (fp)))
#define FAR_WORD(fp) (*((unsigned int far *) (fp)))
#define FAR_ULONG(fp) (*((unsigned long far *) (fp)))
#define _toupper(c) ((c)&0xDF)
unsigned int far *kbdhead = MK_FP(0x40,0x1A);
unsigned int far *kbdtail = MK_FP(0x40,0x1C);
unsigned int far *kbdbufstart = MK_FP(0x40,0x80);
unsigned int far *kbdbufend = MK_FP(0x40,0x82);
/* int far *kbdbuffer = MK_FP(0x40,*kbdbufstart); */
/* int far *kbdbuffer = MK_FP(0x40,0x1E); */
/* int far *BufTailPtr = (int far *) 0x400000|((long)*kbdtail); */
unsigned int far *p = MK_FP(0x40,0);
char stop=0;
unsigned int u;
void OutBuffer(void)
{
for (u=*kbdbufstart;u<*kbdbufend;u+=2) {
*((unsigned int *)&p)=u;
puthexword(*p);
if((u+2)>=*kbdbufend) {
if ((*kbdbufend-*kbdbufstart)>(2*16)) {
if(u==*kbdhead) putchar('<');
newline(); putchar('\n');
} else putchar('\r');
}
else if(u==*kbdhead) putchar('<');
else putchar(' ');
}
}
main(){
newline(); newline();
*kbdhead=*kbdbufstart;
*kbdtail=*kbdbufstart;
for (u=*kbdbufstart;u<*kbdbufend;u+=2) {
*((unsigned int *)&p)=u;
*p=0;
}
OutBuffer();
while (stop==0) {
if(*kbdhead!=*kbdtail) {
stop=((FAR_WORD(SET_FP_OFF(p,*kbdhead)))==0x011B);
if(((*kbdhead)+=2)>=*kbdbufend)*kbdhead=*kbdbufstart;
OutBuffer();
/*
if((*kbdtail+2)==*kbdbufend) {
*kbdtail=*kbdbufstart;
}
*/
}
}
newline();
}